We propose a novel memory controller design that combines the ideas of \textit{thread ranking} and \textit{close-page}. Our design rationale is based on the following observations:\\

A thread with high row-buffer locality is likely to make consecutive accesses to a small subset of banks, causing these banks to be congested. In the meantime, another thread with high bank-level parallelism becomes vulnerable to memory vulnerable if it is accessing congested banks. Hence, a thread with \textit{high bank-level parallelism} is more vulnerable to vulnerable, whereas one with \textit{high row-buffer locality} is more likely to be the culprit of causing conflict. \\

We use \textit{niceness}\cite{kim2010thread} to increase with the relative fragility of a thread and to decrease with its relative hostility. If $\textit{thread}_{i}$ has the $b_{i}^{\textit{th}}$ highest bank-level parallelism and the $r_{i}^{\textit{th}}$ highest row-buffer locality, the niceness is formally defined as follow: 

$$\textit{niceness}_{i} = b_{i} - r_{i}, $$

where $b_{i}$ is the Bank-level parallelism (BLP) of $\textit{thread}_{i}$, $r_{i}$ is the row-buffer locality (RBL) of $\textit{thread}_{i}$. We will discuss these definitions in the next section.\\

We monitors the \textit{niceness} values of threads. \textit{Niceness} values are then used for making shuffling decisions that ensures nicer threads are more likely to be given higher priority.\\